#pragma once 

/* 好友申请事件表的ODB映射 */

#include <string>
#include <cstddef> // std::size_t
#include <odb/nullable.hxx>
#include <odb/core.hxx>

namespace ChatSystem
{
    #pragma db object table("friend_apply")
    //好友申请事件表映射的对象
    class FriendApply
    {
    public:
        FriendApply(){}
        ~FriendApply(){}

        FriendApply(const std::string& event_id, const std::string& user_id, const std::string peer_id)
        :_event_id(event_id), _user_id(user_id), _peer_id(peer_id)
        {}

        //获取好友申请事件ID
        std::string event_id() const
        {
            return _event_id;
        }
        //获取好友申请事件ID
        std::string event_id()
        {
            return _event_id;
        }
        //修改好友申请事件ID
        void event_id(const std::string& val)
        {
            _event_id = val;
        }

        //获取好友申请者ID
        std::string user_id() const
        {
            return _user_id;
        }
        //获取好友申请者ID
        std::string user_id()
        {
            return _user_id;
        }
        //修改好友申请者ID
        void user_id(const std::string& uid)
        {
            _user_id = uid;
        }

        //获取被申请者ID
        std::string peer_id() const
        {
            return _peer_id;
        }
        //获取被申请者ID
        std::string peer_id()
        {
            return _peer_id;
        }
        //修改被申请者ID
        void peer_id(const std::string& val)
        {
            _peer_id = val;
        }

    private:
        friend class odb::access;   //建立友元关系，以便odb框架来访问我们的私有成员
        
        #pragma db id auto
        unsigned long _id;  //主键---这个只能保证同一主机上的用户之间不能重复，而不能保证不同主机数据库上id的唯一性

        #pragma db type("varchar(64)") index unique
        std::string _event_id;  //好友申请事件ID

        #pragma db type("varchar(64)") index
        std::string _user_id;   //好友申请者ID
        #pragma db type("varchar(64)") index   //在MySQL中索引数量过多会影响插入和删除的效率，但是查询效率高；根据具体场景决定
        std::string _peer_id;   //被好友申请者的ID，也就是对方的ID
    };

}

//odb 编译：odb -d mysql --generate-query --generate-schema --profile boost/date-time apply.hxx